package com.minimalist.lindi.service;

import com.minimalist.common.config.mybatis.bo.PageResp;
import com.minimalist.common.entity.lindi.po.LindiTradeApplicationTemplateContract;
import com.minimalist.common.entity.lindi.vo.contracttemplate.LindiContractTemplateVO;
import com.minimalist.common.entity.lindi.vo.tradeapplicationtemplatecontract.LindiTradeApplicationTemplateContractQueryVO;
import com.minimalist.common.entity.lindi.vo.tradeapplicationtemplatecontract.LindiTradeApplicationTemplateContractVO;
import com.mybatisflex.core.service.IService;

import java.util.List;

/**
 * 林地指标交易平台_交易申请合同模板 服务层。
 *
 * @author 11987
 * @since 2025-06-04
 */
public interface LindiTradeApplicationTemplateContractService extends IService<LindiTradeApplicationTemplateContract>{

    /**
     * 添加交易申请合同模板
     *
     * @param tradeApplicationTemplateContractVO 交易申请合同模板VO
     */
    void addTradeApplicationTemplateContract(LindiTradeApplicationTemplateContractVO tradeApplicationTemplateContractVO);

    /**
     * 根据ID删除交易申请合同模板
     *
     * @param tradeApplicationTemplateContractId 交易申请合同模板ID
     */
    void deleteTradeApplicationTemplateContractByTradeApplicationTemplateContractId(Long tradeApplicationTemplateContractId);

    /**
     * 根据ID更新交易申请合同模板
     *
     * @param tradeApplicationTemplateContractVO 交易申请合同模板VO
     */
    void updateTradeApplicationTemplateContractByTradeApplicationTemplateContractId(
            LindiTradeApplicationTemplateContractVO tradeApplicationTemplateContractVO);

    /**
     * 分页查询交易申请合同模板列表
     *
     * @param queryVO 查询条件
     * @return 分页结果
     */
    PageResp<LindiTradeApplicationTemplateContractVO> getPageTradeApplicationTemplateContractList(
            LindiTradeApplicationTemplateContractQueryVO queryVO);

    /**
     * 根据ID查询交易申请合同模板
     *
     * @param tradeApplicationTemplateContractId 交易申请合同模板ID
     * @return 交易申请合同模板VO
     */
    LindiTradeApplicationTemplateContractVO getTradeApplicationTemplateContractByTradeApplicationTemplateContractId(
            Long tradeApplicationTemplateContractId);

    /**
     * 根据文件ID删除交易申请合同模板文件
     *
     * @param fileId 文件ID
     */
    void deleteTradeApplicationTemplateContractFileByFileId(Long fileId);

    /**
     * 生成交易申请合同模板
     *
     * @param tradeApplicationId 交易申请ID
     * @param contractTemplateId 合同模板ID
     * @param contractType       合同类型
     * @param createId           创建人ID
     * @param tanantId           租户ID
     * @return 文件VO
     */
    LindiTradeApplicationTemplateContractVO generateTemplateContract(Long tradeApplicationId, Long contractTemplateId
            , String contractType, Long createId, Long tanantId);

    /**
     * 获取合同模板列表
     *
     * @return 合同模板列表
     */
    List<LindiContractTemplateVO> getContractTemplateList();
}
